package com.alks.function.mapper;

import com.alks.entity.data.entity.PcBeforeLastTime;
import com.alks.entity.data.entity.PcProdStatus2;
import com.alks.function.data.dto.PcProdStatus2CountDto;
import com.alks.function.data.dto.PcProdStatus2Dto;
import com.alks.function.data.request.PcProdStatus2Request;
import com.alks.function.data.request.chengKong.LotNoToStyleRequest;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface PcProdStatus2Mapper extends BaseMapper<com.alks.entity.data.entity.PcProdStatus2> {


    /**
     * 生产动态查询
     * @param request
     * @return
     */
    List<PcProdStatus2Dto> getProductionDynamicQueryData(PcProdStatus2Request request);

    /**
     * 统计总数
     * @param request
     * @return
     */
    PcProdStatus2CountDto getCount(PcProdStatus2Request request);

    /**
     * 时程门槛定义查询
     * @return
     */
    PcBeforeLastTime getTimeDeFine(String companyId);

    /**
     * 修改时程门槛定义
     * @param pcBeforeLastTime
     */
    void updateByID(PcBeforeLastTime pcBeforeLastTime);

    /**
     * 删除大于存在当前时间-15天
     * @return
     */
    int deteleExistsByPcLotFinish();

    /**
     * 查询要生成的动态指令
     * @param companyId
     * @return
     */
    List<PcProdStatus2> getByLotHead(@Param("companyId") String companyId);

    /**
     * 查询冲裁部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getCutDeptList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询冲裁当日数量
     *
     * @param lotNo
     * @param companyId
     * @param processCode
     * @return
     */
    Integer getDaySum(@Param("lotNo") String lotNo, @Param("companyId") String companyId, String processCode);

    /**
     * 查询冲裁入账数量
     * @param lotNo
     * @param companyId
     * @param processCode
     * @return
     */
    Integer getProd(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("processCode") String processCode);

    /**
     * 获取冲裁实际完成时间
     * @param lotNo
     * @param companyId
     * @param processCode
     * @return
     */
    LocalDateTime getFinishDay(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("processCode") String processCode);

    /**
     * 查询针车当日数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getStitchProd(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询针车大于等于当前时间总数
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getStitchProdAll(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询针车部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getStitchDeptList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询针车实际完成时间
     * @param lotNo
     * @param companyId
     * @return
     */
    LocalDateTime getStitchFinishDay(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询鞋面库存
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getShoeStock(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 获取大底部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getSoleDeptList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询大底数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getSoleProd(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询大底入账数量
     * @param lotNo
     * @param companyId
     * @param type 1.大底 2.鞋垫
     * @return
     */
    Integer getSoleProdAll(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("type") int type);

    /**
     * 查询大底实际完成时间
     * @param lotNo
     * @param companyId
     * @return
     */
    LocalDateTime getSoleFinishDay(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getLastDeptList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型当日数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getLastProd(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型投料总数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getLastProdAll(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型投料部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getLastDeptList2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型投料部门
     * @param lotNo
     * @param companyId
     * @return
     */
    List<String> getLastDeptList3(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型实际完成时间
     * @param lotNo
     * @param companyId
     * @return
     */
    LocalDateTime getLastFinishDay(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型当日产出数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getLastProd2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型产出总数量
     * @param lotNo
     * @param companyId
     * @return
     */
    Integer getLastProdAll2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 查询成型产出实际完成时间
     * @param lotNo
     * @param companyId
     * @return
     */
    LocalDateTime getLastFinishDay2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 批量插入
     * @param list
     * @return
     */
    int insertList(@Param("list") List<PcProdStatus2> list);

    /**
     * 更新标记
     * @return
     */
    int updateByFlag(String companyId);

    int updateByFlag2(String companyId);

    int updateByFlag3(String companyId);

    /**
     * 写入更新记录
     * @param companyId
     * @param sysdate
     * @param loginName
     * @param date
     */
    void addPcProdStatusDate2(@Param("companyId") String companyId, @Param("sysdate") LocalDateTime sysdate,
                              @Param("loginName") String loginName, @Param("date") LocalDate date);

    /**
     * 删除标记指令
     * @param companyId
     * @param lotNo
     * @return
     */
    int delPcLotHandEnd(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    /**
     * 添加标记指令
     * @param companyId
     * @param lotNo
     * @return
     */
    int addPcLotHandEnd(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    /**
     * 返回核算时间
     * @param companyId
     * @return
     */
    String ReturnTime(@Param("companyId") String companyId);

    /**
     * 查询标注结束指令
     * @param request
     * @return
     */
    List<String> getLotNoList(LotNoToStyleRequest request);
}
